package com.wn.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wn.bean.PageData;
import com.wn.bean.Result;
//import com.wn.dto.QueryTrainerDTO;
import com.wn.pojo.Trainer;
import com.wn.service.ITrainerService;
//import com.wn.utils.Constant;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Objects;

/**
 * <p>
 * 培训师 前端控制器
 * </p>
 *
 * @author yellow docker
 * @since 2022-12-28
 */
@Slf4j
@Api(tags = "trainer 模块管理 ")
@RestController
@RequestMapping("/trainer")
public class TrainerController extends BaseController {

//    @Autowired
//    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private ITrainerService trainerService;

    /**
     * 通过id查询
     *
     * @param id
     * @return 1557763044916903937
     */
    @GetMapping("{id}")
    public Result findTrainerById(@PathVariable String id) {

        Trainer trainer = trainerService.getById(id);
        return toDataResult(trainer);
    }


    /**
     * 分页查询
     *
     * @return 前端如何把 页面的数据传递到 服务器？
     * 1、表单、a标签 (请求地址)
     * 表单 可以get、post传递
     * 请求地址 只能get 一般是查询操作
     * <p>
     * 2、restful
     * get、post、put、delete (注意请求方式)
     * 3、ajax
     * axios.xxx({
     * method:"请求方式",
     * url:"请求的地址",
     * params:{
     * }
     * }).then(resp=>{
     * //返回成功的结果
     * })
     * params:  参数在url上面进行拼接
     * data:    参数在请求体 (提交的数据是json格式 )
     * <p>
     * 服务器如何接受前端的数据?
     * 1、 直接获取、指定绑定成对象
     * 表单、a标签   可以直接获取
     * <p>
     * 2、 ajax 提交的data 如何获取?
     * @RequestBody 可以直接接受前端提交的json 把数据转成obj对象
     * <p>
     * 3、restful 通过 @PathVariable  获取url 上面的数据
     */
//    @ApiOperation("分页查询操作")
//    @GetMapping("page/{currentPage}/{pageSize}")
//    public Result searchPageUsers(
//            @PathVariable Integer currentPage,
//            @PathVariable Integer pageSize,
//            QueryTrainerDTO queryTrainerDTO
//    ) {
//        log.info("获取前端发送过来的查询对象数据:{}", queryTrainerDTO);
//
//        /**
//         * 分页操作的步骤:
//         * 1、配置分页插件
//         * 2、准备分页条件
//         * 3、调用pageXXX方法
//         * 4、拿到分页结果、封装分页数据返回
//         */
//        //条件查询
//
//        LambdaQueryWrapper<Trainer> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//
//        //不为空
//        if (Objects.nonNull(queryTrainerDTO)) {
//            //条件对象
//            //是否有用户名
//            if (!StringUtils.isEmpty(queryTrainerDTO.getName())) {
//                lambdaQueryWrapper.like(Trainer::getName, queryTrainerDTO.getName());
//            }
//            //等级
//            if (!StringUtils.isEmpty(queryTrainerDTO.getLevel())) {
//                lambdaQueryWrapper.eq(Trainer::getLevel, queryTrainerDTO.getLevel());
//            }
//            // 开始时间结束实现
//            if (!StringUtils.isEmpty(queryTrainerDTO.getCreateTimeEnd())) {
//                lambdaQueryWrapper.between(Trainer::getCreateTime, queryTrainerDTO.getCreateTimeStart(), queryTrainerDTO.getCreateTimeEnd());
//            }
//        }
//
//        IPage<Trainer> p = new Page<>(currentPage, pageSize);
//        IPage<Trainer> iPage = trainerService.page(p,lambdaQueryWrapper);
//
//        long total = iPage.getTotal();
//        List<Trainer> trainers = iPage.getRecords();
//
//        //封装分页数据
//        PageData pageData = new PageData();
//        pageData.setTotal(total);
//        pageData.setData(trainers);
//
//        return toDataResult(pageData);
//    }

    /**
     * 添加
     *
     * @param trainer
     * @return
     */
//    @ApiOperation("添加")
//    @PostMapping
//    public Result saveTrainer(@RequestBody Trainer trainer) {
//        boolean save = trainerService.save(trainer);
//
//        if (save){
//            //把图片 记录到redis中
//            String avatar = trainer.getAvatar();
////            String url = "http://rn6g160t9.hn-bkt.clouddn.com/79bf5c7c-9fef-459f-bc0a-182f3ae5fb09.webp";
//            String fileName =avatar.substring( avatar.lastIndexOf("/") + 1);
//            stringRedisTemplate.opsForSet().add(Constant.REDIS_DB_UPLOAD_IMAGE,fileName);
//        }
//        return save ? success() : error();
//    }

    /**
     * 删除
     * @param id
     * @return
     */
    @ApiOperation("删除")
    @DeleteMapping("{id}")
    public Result deleteTrainerById(@PathVariable String id) {
        boolean delete = trainerService.removeById(id);
        return delete ? success() : error();
    }


    /**
     * 修改
     *
     * @param trainer
     * @return
     */
    @ApiOperation("修改")
    @PutMapping
    public Result updateTrainer(@RequestBody Trainer trainer) {
        boolean update = trainerService.updateById(trainer);
        return update ? success() : error();
    }

    @ApiOperation("查询所有的讲师")
    @GetMapping("list")
    public Result findTrainerList() {
        List<Trainer> trainers = trainerService.list();
        return toDataResult(trainers);
    }


}
